package com.example.blog.component;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * @Question SecurityUtil 加盐加密类
 * @Date 2023/1/14 21:28 password未加密的密码 finalPassword加密后的密码
 * @Solution
 */
public class SecurityUtil {
    //加盐
    public static String encrypt(String password) {
        //用UUID生成不同的盐值，长度固定为32
        String salt = UUID.randomUUID().toString().replace("-", "");
        //最终密码等于盐值+密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        return salt+finalPassword;
    }
    //验证密码
    public static Boolean decrypt(String password,String finalPassword) {
        if(!StringUtils.hasLength(password)||!StringUtils.hasLength(finalPassword)) {
            return false;
        }
        if(finalPassword.length()!=64) {
            return false;
        }
        String salt=finalPassword.substring(0,32);
        //根据盐值加传入的密码生成一个md加密的待确认的密码，和加密过的正确密码对比
        String uncheckPassword=DigestUtils.md5DigestAsHex((salt+password).getBytes());
        return (salt+uncheckPassword).equals(finalPassword);
    }
}
